package com.gdust.spzx.common.log.annotation;

import com.gdust.spzx.common.log.enums.OperatorType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ClassName: Log
 * Package: com.gdust.spzx.common.log
 * Description:自定义Log注解
 *
 * AOP记录日志的整体思想：
 * 1、基于自定义注解来确定切入点【优势：可以通过自定义注解携带一些变化的参数，比如模块名称】。
 * 2、基于环绕通知来完成日志记录。
 *
 * @Author syun
 * @Create 2024/12/24 20:07
 * @Version 1.0
 */
@Target({ElementType.METHOD})// 指定注解的作用目标为方法
@Retention(RetentionPolicy.RUNTIME)// 指定注解的生命周期为运行时
public @interface Log {
    /**
     * 操作标题
     *
     * 用于指定操作的名称或描述，开发者可以根据具体操作进行描述。
     *
     * @return String 操作的标题
     */
    public String title() ;

    /**
     * 操作人类别
     *
     * 用于指定操作人的类型，默认为管理员（OperatorType.MANAGE）。
     * 该值来自于枚举类 OperatorType，可以选择不同的操作角色（如前台用户、后台管理员等）。
     *
     * @return OperatorType 操作人类别
     */
    public OperatorType operatorType() default OperatorType.MANAGE;

    /**
     * 业务类型
     *
     * 指定该操作的业务类型。常用值包括：
     *  - 0: 其它
     *  - 1: 新增
     *  - 2: 修改
     *  - 3: 删除
     *
     * @return int 业务类型
     */
    public int businessType() ;

    /**
     * 是否保存请求参数
     *
     * 指定是否在日志中记录请求的参数数据。默认值为 `true`，表示保存请求参数。
     *
     * @return boolean 是否保存请求参数
     */
    public boolean isSaveRequestData() default true;

    /**
     * 是否保存响应参数
     *
     * 指定是否在日志中记录响应的数据。默认值为 `true`，表示保存响应参数。
     *
     * @return boolean 是否保存响应参数
     */
    public boolean isSaveResponseData() default true;
}
